with Interfaces.C; use Interfaces.C;
with SDL_stdinc_h;
with SDL_keysym_h;
with Interfaces.C.Strings;

package SDL_keyboard_h is


  SDL_ALL_HOTKEYS : constant := 16#FFFFFFFF#;  --  SDL_keyboard.h:62

  SDL_DEFAULT_REPEAT_DELAY : constant := 500;  --  SDL_keyboard.h:81
  SDL_DEFAULT_REPEAT_INTERVAL : constant := 30;  --  SDL_keyboard.h:82

  --    SDL - Simple DirectMedia Layer
  --    Copyright (C) 1997-2006 Sam Lantinga
  --    This library is free software; you can redistribute it and/or
  --    modify it under the terms of the GNU Lesser General Public
  --    License as published by the Free Software Foundation; either
  --    version 2.1 of the License, or (at your option) any later version.
  --    This library is distributed in the hope that it will be useful,
  --    but WITHOUT ANY WARRANTY; without even the implied warranty of
  --    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  --    Lesser General Public License for more details.
  --    You should have received a copy of the GNU Lesser General Public
  --    License along with this library; if not, write to the Free Software
  --    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  --    Sam Lantinga
  --    slouken@libsdl.org
  -- 

  -- Include file for SDL keyboard event handling  
  -- Set up for C function definitions, even when using C++  
  -- Keysym structure
  --   - The scancode is hardware dependent, and should not be used by general
  --     applications.  If no hardware scancode is available, it will be 0.
  --   - The 'unicode' translated character is only available when character
  --     translation is enabled by the SDL_EnableUNICODE() API.  If non-zero,
  --     this is a UNICODE character corresponding to the keypress.  If the
  --     high 9 bits of the character are 0, then this maps to the equivalent
  --     ASCII character:
  --	char ch;
  --	if ( (keysym.unicode & 0xFF80) == 0 ) {
  --		ch = keysym.unicode & 0x7F;
  --	} else {
  --		An international character..
  --	}
  --  

  -- hardware specific scancode  
   type SDL_keysym is record
      scancode : aliased SDL_stdinc_h.Uint8;  -- SDL_keyboard.h:55:8
      sym : aliased SDL_keysym_h.SDLKey;  -- SDL_keyboard.h:56:9
      c_mod : aliased SDL_keysym_h.SDLMod;  -- SDL_keyboard.h:57:9
      unicode : aliased SDL_stdinc_h.Uint16;  -- SDL_keyboard.h:58:9
   end record;
   pragma Convention (C, SDL_keysym);  -- SDL_keyboard.h:54:27

  -- SDL virtual keysym  
  -- current key modifiers  
  -- translated character  
  -- This is the mask which refers to all hotkey bindings  
  -- Function prototypes  
  -- * Enable/Disable UNICODE translation of keyboard input.
  -- * This translation has some overhead, so translation defaults off.
  -- * If 'enable' is 1, translation is enabled.
  -- * If 'enable' is 0, translation is disabled.
  -- * If 'enable' is -1, the translation state is not changed.
  -- * It returns the previous state of keyboard translation.
  --  

   function SDL_EnableUNICODE (enable : int) return int;  -- SDL_keyboard.h:73:57
   pragma Import (C, SDL_EnableUNICODE, "SDL_EnableUNICODE");

  -- * Enable/Disable keyboard repeat.  Keyboard repeat defaults to off.
  -- * 'delay' is the initial delay in ms between the time when a key is
  -- * pressed, and keyboard repeat begins.
  -- * 'interval' is the time in ms between keyboard repeat events.
  --  

  -- * If 'delay' is set to 0, keyboard repeat is disabled.
  --  

   function SDL_EnableKeyRepeat (c_delay : int; interval : int) return int;  -- SDL_keyboard.h:86:72
   pragma Import (C, SDL_EnableKeyRepeat, "SDL_EnableKeyRepeat");

   procedure SDL_GetKeyRepeat (c_delay : access int; interval : access int);  -- SDL_keyboard.h:87:72
   pragma Import (C, SDL_GetKeyRepeat, "SDL_GetKeyRepeat");

  -- * Get a snapshot of the current state of the keyboard.
  -- * Returns an array of keystates, indexed by the SDLK_* syms.
  -- * Used:
  -- * 	Uint8 *keystate = SDL_GetKeyState(NULL);
  -- *	if ( keystate[SDLK_RETURN] ) ... <RETURN> is pressed.
  --  

   function SDL_GetKeyState (numkeys : access int) return access SDL_stdinc_h.Uint8;  -- SDL_keyboard.h:96:61
   pragma Import (C, SDL_GetKeyState, "SDL_GetKeyState");

  -- * Get the current key modifier state
  --  

   function SDL_GetModState return SDL_keysym_h.SDLMod;  -- SDL_keyboard.h:101:52
   pragma Import (C, SDL_GetModState, "SDL_GetModState");

  -- * Set the current key modifier state
  -- * This does not change the keyboard state, only the key modifier flags.
  --  

   procedure SDL_SetModState (modstate : SDL_keysym_h.SDLMod);  -- SDL_keyboard.h:107:61
   pragma Import (C, SDL_SetModState, "SDL_SetModState");

  -- * Get the name of an SDL virtual keysym
  --  

   function SDL_GetKeyName (key : SDL_keysym_h.SDLKey) return Interfaces.C.Strings.chars_ptr;  -- SDL_keyboard.h:112:57
   pragma Import (C, SDL_GetKeyName, "SDL_GetKeyName");

  -- Ends C function definitions when using C++  
end SDL_keyboard_h;
